#ifndef IO__MINDVISION_HPP
#define IO__MINDVISION_HPP

#include <chrono>
#include <thread>
#include <atomic>

#include "CameraApi.h"
#include "camera.hpp"
#include "sensor_msgs/msg/image.hpp"
#include "rclcpp/rclcpp.hpp"
namespace io
{
  class MindVision : public CameraBase
  {
  public:
    MindVision(double exposure_ms, double gamma, const std::string &vid_pid, const rclcpp::Logger &logger);
    ~MindVision() override;
    // 图像读取接口
    void read(sensor_msgs::msg::Image &img) override;
    bool set_param(const std::string & param_name, double value) override;  // 实现统一接口
    void close() override;// 实现基类的stop()接口
    bool open() override;
  private:
    /*---------------------相机参数---------------------*/
    // 曝光时间
    double exposure_ms_;
    // 伽马值
    double gamma_;
    // 相机SDK句柄
    CameraHandle handle_;
    // 图像分辨率,长和宽
    int height_, width_;
    // USB厂商ID和产品ID
    int vid_, pid_;

    // 尝试打开相机
    bool try_open();
    // USB 设备标识解析
    void set_vid_pid(const std::string &vid_pid);
    // USB复位
    void reset_usb() const;
    //设置曝光时间
    bool set_exposure(double exposure_ms);
    // 设置伽马值
    bool set_gamma(double gamma);
  };
}

#endif // IO__MINDVISION_HPP